#include "nodo.h"

Nodo::~Nodo()
{
    //dtor
}

void Nodo::update(gdouble x, gdouble y)
{
    set_x(x);
    set_y(y);
}

gboolean Nodo::intersect(gdouble x, gdouble y)
{
    return (x <= get_x() + raggio &&
            x >= get_x() - raggio &&
            y <= get_y() + raggio &&
            y >= get_y() - raggio);
}

void Nodo::draw(cairo_t* &cr)
{
    const guint FONT_SIZE = 16;

    // Seleziona il colore del bordo
    if(is_over())
        cairo_set_source_rgb(cr, 0.0, 0.8, 0.0);
    else if(is_selected())
        cairo_set_source_rgb(cr, 0.5, 1.0, 0.5);
    else
        cairo_set_source_rgb(cr, 0.0, 0.0, 0.0);
    
    cairo_set_line_width(cr, 2.0);
    
    // Disegna il pallino
    cairo_arc(cr, get_x(), get_y(), raggio, 0, 2*G_PI);
    cairo_stroke(cr);
    
    // Seleziona il colore del riempimento
    if(is_over())
        cairo_set_source_rgb(cr, 0.6, 0.8, 0.6);
    else if(is_selected())
        cairo_set_source_rgb(cr, 0.8, 1.0, 0.8);
    else
        cairo_set_source_rgb(cr, 1.0, 1.0, 1.0);

    cairo_arc(cr, get_x(), get_y(), raggio, 0, 2*G_PI);
    cairo_fill(cr);
    cairo_stroke(cr);
    
    // Scrive il numero all'interno del cerchio 
    cairo_set_source_rgb(cr, 0.0, 0.0, 0.0);
    
    cairo_select_font_face(cr, "Arial",
      CAIRO_FONT_SLANT_NORMAL,
      CAIRO_FONT_WEIGHT_BOLD);

    cairo_set_font_size(cr, FONT_SIZE);
    cairo_move_to(cr, get_x() - FONT_SIZE/2, get_y() + FONT_SIZE/2);
  
    char label[4];
    sprintf(label, "%d", get_indice());
    cairo_show_text(cr, label);  
    cairo_stroke(cr);
    
    // Scrive la distanza corrente (solo se è maggiore di MinInt, altrimenti vuol dire che non è stato eseguito nessun algoritmo ancora)
    if(get_distanza() > G_MININT)
    {
        cairo_move_to(cr, get_x() - FONT_SIZE/2, get_y() - raggio);
        
        if(get_distanza() == G_MAXINT)
            cairo_show_text(cr, "inf");
        else
        {
            sprintf(label, "%d", get_distanza());  
            cairo_show_text(cr, label);
        }
        cairo_stroke(cr);
    } 
    
}
